TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
	/*输入某二叉树的前序遍历和中序遍历的结果，请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。*/
	
		//通过递归完成建树
		//递归结束条件
		if (pre.size() == 0)
			return NULL;
		TreeNode* newT = new TreeNode(pre[0]);
		if (pre.size() == 1)
			return newT;
		//找到首节点位置
		int i = 0;
		while (vin[i] != pre[0]) i++;
		//为什么边界还包含了vin[i], 就是为了防止 容器创建不成功的情况
		//即 防止尾比首小的情况。
		vector<int> vl = vector<int>(vin.begin(), vin.begin() + i); //vin从开始的i个元素加入到vl,即中序的左子树
		vector<int> vr = vector<int>(vin.begin() + i + 1, vin.end());
		vector<int> pl = vector<int>(pre.begin() + 1, pre.begin() + 1 + i);
		vector<int> pr = vector<int>(pre.begin() + i + 1, pre.end());
		newT->left = reConstructBinaryTree(pl, vl);
		newT->right = reConstructBinaryTree(pr, vr);
		return newT;
	}
